home *** CD-ROM | disk | FTP | other *** search
/ Workbench Design / WB Collection.iso / workbench werkzeuge / memory & system tools / copymemquicker / source / copymemquicker.asm < prev    next >
Assembly Source File  |  1996-04-07  |  3KB  |  117 lines

  1.     nolist
  2. **********************************************************************
  3. *             CopyMemQuicker 2.8 - (C) 1991-1994 Arthur Hagen        *
  4. *     Parts of code: (C) 1985-1991 Commodore Business Machines Ltd.  *
  5. *                    Posted to the Public Domain                     *
  6. **********************************************************************
  7.  
  8.     include    'exec/execbase.i'
  9.     include    'exec/memory.i'
  10.     public    _QuickMem
  11.     list
  12. _QuickMem
  13.     movea.l    (4).w,a6            ; ExecBase
  14.     lea    dosname(pc),a1
  15.     jsr    _LVOOldOpenLibrary#(a6)        ; Any version will do
  16.     movea.l    d0,a5
  17.     exg.l    a5,a6
  18.     jsr    _LVOOutput#(a6)
  19.     exg.l    a5,a6
  20.     move.l    d0,d5
  21.     moveq    #title_end-title,d3
  22.     lea    title(pc),a0
  23.     bsr.s    wrt
  24.     movea.l    _LVOCopyMem#+2(a6),a3
  25.     cmpi.l    #'*Art',-(a3)
  26.     beq.s    isquicker
  27.     moveq    #0,d4
  28.     moveq    #0,d6
  29.     moveq    #0,d7
  30.     move.b    AttnFlags+1(a6),d0
  31.     btst    #AFB_68020,d0
  32.     bne.s    has020
  33.     btst    #AFB_68010,d0
  34.     bne.s    has010
  35.     move.w    #CopyLen00#,d4
  36.     move.w    #Quicker00#,d6
  37.     move.w    #Quickest00#,d7
  38.     lea    Start00#(pc),a2
  39.     bra.s    allocit
  40.  
  41. has010    move.w    #CopyLen10#,d4
  42.     move.w    #Quicker10#,d6
  43.     move.w    #Quickest10#,d7
  44.     lea    Start10#(pc),a2
  45.     bra.s    allocit
  46.  
  47. has020    move.w    #CopyLen20#,d4
  48.     move.w    #Quicker20#,d6
  49.     move.w    #Quickest20#,d7
  50.     lea    Start20#(pc),a2
  51. allocit    moveq    #24,d0
  52.     add.l    d4,d0
  53.     move.l    #(MEMF_PUBLIC|MEMF_FAST),d1
  54.     jsr    _LVOAllocMem#(a6)
  55.     tst.l    d0
  56.     beq.s    nomem
  57.     addq.l    #8,d0
  58.     addq.l    #7,d0
  59.     moveq    #$fffffff0,d1
  60.     and.l    d1,d0        ; we now have an address modulo 16
  61.     addq.l    #4,d0
  62.     move.l    d0,a3
  63.     lea    8(a3),a4
  64.     movea.l    a2,a0
  65.     movea.l    a4,a1
  66.     move.l    d4,d0
  67.     jsr    (a2,d6.w)    ; new CopyMemQuicker
  68.     move.l    d7,d0
  69.     add.l    a4,d0
  70.     bsr.s    setcmq
  71.     move.l    d0,(a3)+
  72.     move.l    d6,d0
  73.     add.l    a4,d0
  74.     bsr.s    setcm
  75.     move.l    d0,(a3)+
  76. quit    movea.l    a5,a1
  77.     jmp    _LVOCloseLibrary#(a6)    ; faster than jsr + rts
  78.  
  79. nomem    moveq    #memerr_end-memerr,d3
  80.     lea    memerr(pc),a0
  81.     pea    quit(pc)    ; faster than 'bsr.s wrt' + 'bra.s quit'
  82. wrt    move.l    a0,d2
  83.     move.l    d5,d1
  84.     exg.l    a5,a6
  85.     jsr    _LVOWrite#(a6)
  86.     exg.l    a5,a6
  87.     rts
  88.  
  89. isquicker
  90.     moveq    #already_end-already,d3
  91.     lea    already(pc),a0
  92.     bsr.s    wrt
  93.     move.l    -(a3),d0
  94.     bsr.s    setcm
  95.     move.l    -(a3),d0
  96.     pea    quit(pc)    ; faster than 'bsr.s setcmq' + 'bra.s quit'
  97.  
  98. setcmq    lea    (_LVOCopyMemQuick#).w,a0
  99.     bra.s    setit
  100.  
  101. setcm    lea    (_LVOCopyMem#).w,a0
  102. setit    movea.l    a6,a1
  103.     jmp    _LVOSetFunction#(a6)
  104.  
  105. ************************************************************
  106.  
  107. version    dc.b    '$VER: '
  108. title    dc.b    'CopyMemQuicker 2.8 (12.6.94)',$0A,$0D
  109.     dc.b    'Copyright ',$A9,' 1992 Arthur Hagen.',$0A
  110. title_end
  111. already    dc.b    'Restoring vectors.',$0A
  112. already_end
  113. memerr    dc.b    'No FAST memory!',$0A
  114. memerr_end
  115. dosname    dc.b    'dos.library',0
  116.     even
  117.